package models

import "time"

// ModelConfig 模型配置结构体
type ModelConfig struct {
	ID             int       `json:"id" db:"id"`                           // 自增主键
	ModelPath      string    `json:"model_path" db:"model_path"`           // 模型路径，例如 /models/xxx 或 API 地址
	RequestHeaders string    `json:"request_headers" db:"request_headers"` // 请求头信息，JSON 格式存储
	VendorCN       string    `json:"vendor_cn" db:"vendor_cn"`             // 模型供应商中文名
	VendorEN       string    `json:"vendor_en" db:"vendor_en"`             // 模型供应商英文名
	VendorImg      *string   `json:"vendor_img" db:"vendor_img"`           // 供应商图片路径，可为空
	ModelName      *string   `json:"model_name" db:"model_name"`           // 模型名称，可为空
	ModelType      string    `json:"model_type" db:"model_type"`           // 模型类型：llm, embedding, reranker
	Enabled        int       `json:"enabled" db:"enabled"`                 // 是否启用（0=否，1=是）
	CreatedAt      time.Time `json:"created_at" db:"created_at"`           // 创建时间
	UpdatedAt      time.Time `json:"updated_at" db:"updated_at"`           // 更新时间
}

// CreateModelConfigRequest 创建模型配置请求结构体
type CreateModelConfigRequest struct {
	ModelPath      string  `json:"model_path" binding:"required" example:"http://localhost:8080/api/v1/chat"` // 模型路径
	RequestHeaders string  `json:"request_headers" example:"{\"Authorization\": \"Bearer token\"}"`           // 请求头信息
	VendorCN       string  `json:"vendor_cn" binding:"required" example:"OpenAI"`                             // 模型供应商中文名
	VendorEN       string  `json:"vendor_en" binding:"required" example:"openai"`                             // 模型供应商英文名
	VendorImg      *string `json:"vendor_img" example:"/images/openai-logo.png"`                              // 供应商图片路径，可选
	ModelName      *string `json:"model_name" example:"GPT-3.5-turbo"`                                        // 模型名称，可选
	ModelType      string  `json:"model_type" binding:"required,oneof=llm embedding reranker" example:"llm"`  // 模型类型
	Enabled        int     `json:"enabled" example:"1"`                                                       // 是否启用
}

// UpdateModelConfigRequest 更新模型配置请求结构体
type UpdateModelConfigRequest struct {
	ModelPath      string  `json:"model_path" example:"http://localhost:8080/api/v1/chat"`          // 模型路径
	RequestHeaders string  `json:"request_headers" example:"{\"Authorization\": \"Bearer token\"}"` // 请求头信息
	VendorCN       string  `json:"vendor_cn" example:"OpenAI"`                                      // 模型供应商中文名
	VendorEN       string  `json:"vendor_en" example:"openai"`                                      // 模型供应商英文名
	VendorImg      *string `json:"vendor_img" example:"/images/openai-logo.png"`                    // 供应商图片路径，可选
	ModelName      *string `json:"model_name" example:"GPT-3.5-turbo"`                              // 模型名称，可选
	ModelType      string  `json:"model_type" oneof:"llm embedding reranker" example:"llm"`         // 模型类型
	Enabled        *int    `json:"enabled" example:"1"`                                             // 是否启用，指针类型用于区分0值和未设置
}

// ModelConfigListResponse 模型配置列表响应结构体
type ModelConfigListResponse struct {
	Total int           `json:"total" example:"10"` // 总数
	List  []ModelConfig `json:"list"`               // 配置列表
	Page  int           `json:"page" example:"1"`   // 当前页
	Size  int           `json:"size" example:"10"`  // 每页大小
}

// ModelConfigResponse 单个模型配置响应结构体
type ModelConfigResponse struct {
	Code    int          `json:"code" example:"200"`   // 状态码
	Message string       `json:"message" example:"成功"` // 消息
	Data    *ModelConfig `json:"data"`                 // 数据
}

// ModelConfigListAPIResponse 模型配置列表API响应结构体
type ModelConfigListAPIResponse struct {
	Code    int                      `json:"code" example:"200"`   // 状态码
	Message string                   `json:"message" example:"成功"` // 消息
	Data    *ModelConfigListResponse `json:"data"`                 // 数据
}

// CommonResponse 通用响应结构体
type CommonResponse struct {
	Code    int    `json:"code" example:"200"`   // 状态码
	Message string `json:"message" example:"成功"` // 消息
}
